package com.livefilms.main;

import java.awt.Color;
import java.awt.Image;
import java.awt.image.BufferedImage;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;

import javax.imageio.ImageIO;

import org.apache.commons.lang.StringEscapeUtils;
import org.apache.log4j.Logger;


public class HttpUtility {

	private static Logger log = Logger.getLogger(HttpUtility.class);
	private static Logger log_error = Logger.getLogger("ERROR");
	
	public String getTitolo(String titolo){
		String[] arrayTitol = titolo.split("\\(");
	    String result = arrayTitol[0];
	    result = result.replaceAll("\\[B/N\\]", "");
	    result = result.replaceAll("\\[Sub\\-ITA\\]", "");
		return result.trim();
	}
	
	public boolean isBn(String titolo){
		if(titolo.contains("[B/N]")){
			return true;
		 }
		return false;
	}
	
	public boolean isSub(String titolo){
		if(titolo.contains("[Sub-ITA]")){
			return true;
		 }
		return false;
	}
	
	public int getAnno(String titolo){
		String[] arrayTitol = titolo.split("\\(");
		try{
			String anno = arrayTitol[1].replace(")","");
			
			try{
				return Integer.parseInt(anno);
			}catch(NumberFormatException ex){
				return 0;
			}
		}catch(ArrayIndexOutOfBoundsException e){
			return 0;
		}
	}
	
	public String getDescrizione(String descrizione_temp){
		
		String descrizione = StringEscapeUtils.unescapeHtml(descrizione_temp).trim();

		/*try {
			descrizione_temp = StringEscapeUtils.unescapeHtml(descrizione_temp).replaceAll("[^\\x20-\\x7e]", "").trim();
			int position  = descrizione_temp.indexOf("+Info");
			if(position != -1){
				descrizione_temp = descrizione_temp.substring(0,position).trim();
			}
			String[] arrayDescrizione = descrizione_temp.split("  ");
		
			if(arrayDescrizione.length == 4){
				arrayDescrizione = descrizione_temp.split("    ");
			}
			
			descrizione = arrayDescrizione[1];
		}catch(ArrayIndexOutOfBoundsException e){
			log_error.error("ArrayIndexOutOfBoundsException: "+e+" ["+descrizione_temp+"]");
		}*/
		return descrizione;
	}
	
	public int getDurata(String descrizione){
		 String[] inforArray = descrizione.split("-");
		 if(inforArray.length > 1){
			String durata =  inforArray[1].replaceAll("DURATA","").replace("'","").trim();
			try{
				return Integer.parseInt(durata);
			}catch(NumberFormatException ex){
				return 0;
			}
		 }
		 return 0;
	}
	
	public String getPaese(String descrizione_temp){
		 descrizione_temp = StringEscapeUtils.unescapeHtml(descrizione_temp).replaceAll("[^\\x20-\\x7e]", "").trim();
		 String[] inforArray = descrizione_temp.split("-");
		 if(inforArray.length > 2)
			 return  inforArray[2].split("  ")[0].trim();
		 return "-";
	}
	
	public String getTipologia(String descrizione){
		 String[] inforArray = descrizione.split("-");
		 if(inforArray.length >= 0)
			 return inforArray[0].replaceAll("\\(MEGAVIDEO\\)","").trim();
		 return "-";
	}
	
	public long generateCode(CineModel film){
		 if(film !=null){
			 return Long.parseLong((String.valueOf((film.getTitolo()+film.getAnno()+film.isBn()+film.isSub()+film.getTipologia()+film.getDurata()).hashCode()).replace("-","")));
		 }
		 return Long.MIN_VALUE;
	}
	
	public Date generateData(String dataUscita){
		try {
			return new SimpleDateFormat("d MMMM yyyy", Locale.ITALIAN).parse(dataUscita.trim());
		} catch (ParseException e) {
			log.error("ParseException - "+e);
			e.printStackTrace();
		}
		return null;
	}
	
	public byte[] scale(byte[] fileData, int width, int height) {
    	ByteArrayInputStream in = new ByteArrayInputStream(fileData);
    	try {
    		BufferedImage img = ImageIO.read(in);
    		if(height == 0) {
    			height = (width * img.getHeight())/ img.getWidth(); 
    		}
    		if(width == 0) {
    			width = (height * img.getWidth())/ img.getHeight();
    		}
    		Image scaledImage = img.getScaledInstance(width, height, Image.SCALE_SMOOTH);
    		BufferedImage imageBuff = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
    		imageBuff.getGraphics().drawImage(scaledImage, 0, 0, new Color(0,0,0), null);

    		ByteArrayOutputStream buffer = new ByteArrayOutputStream();

    		ImageIO.write(imageBuff, "jpg", buffer);

    		return buffer.toByteArray();
    	} catch (IOException e) {
    		log.error("IOException - "+e);
    	}catch(IllegalArgumentException illegag){
    		log.error("IOException - "+illegag);
    	}
		return fileData;
    }

}
